home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / wais / waisgate / HTAnchor.h < prev    next >
C/C++ Source or Header  |  1995-05-09  |  9KB  |  298 lines

  1. /*  */
  2.  
  3. /*      Hypertext "Anchor" Object                                    HTAnchor.h
  4. **      ==========================
  5. **
  6. **      An anchor represents a region of a hypertext document which is linked
  7. **      to another anchor in the same or a different document.
  8. */
  9.  
  10. #ifndef HTANCHOR_H
  11. #define HTANCHOR_H
  12.  
  13. /* Version 0 (TBL) written in Objective-C for the NeXT browser */
  14. /* Version 1 of 24-Oct-1991 (JFG), written in C, browser-independant */
  15.  
  16. #include "HTList.h"
  17. #include "HTAtom.h"
  18.  
  19. #ifdef SHORT_NAMES
  20. #define HTAnchor_findChild                      HTAnFiCh
  21. #define HTAnchor_findChildAndLink               HTAnFiLi
  22. #define HTAnchor_findAddress                    HTAnFiAd
  23. #define HTAnchor_delete                         HTAnDele
  24. #define HTAnchor_makeLastChild                  HTAnMaLa
  25. #define HTAnchor_parent                         HTAnPare
  26. #define HTAnchor_setDocument                    HTAnSeDo
  27. #define HTAnchor_document                       HTAnDocu
  28. #define HTAnchor_setFormat                      HTAnSeFo
  29. #define HTAnchor_format                         HTAnForm
  30. #define HTAnchor_setIndex                       HTAnSeIn
  31. #define HTAnchor_isIndex                        HTAnIsIn
  32. #define HTAnchor_address                        HTAnAddr
  33. #define HTAnchor_hasChildren                    HTAnHaCh
  34. #define HTAnchor_title                          HTAnTitl
  35. #define HTAnchor_setTitle                       HTAnSeTi
  36. #define HTAnchor_appendTitle                    HTAnApTi
  37. #define HTAnchor_link                           HTAnLink
  38. #define HTAnchor_followMainLink                 HTAnFoMa
  39. #define HTAnchor_followTypedLink                HTAnFoTy
  40. #define HTAnchor_makeMainLink                   HTAnMaMa
  41. #endif
  42.  
  43. /*                      Main definition of anchor
  44. **                      =========================
  45. */
  46.  
  47. typedef struct _HyperDoc HyperDoc;  /* Ready for forward references */
  48. typedef struct _HTAnchor HTAnchor;
  49. typedef struct _HTParentAnchor HTParentAnchor;
  50.  
  51. /*      After definition of HTFormat: */
  52. #include "HTFormat.h"
  53.  
  54. typedef HTAtom HTLinkType;
  55.  
  56. typedef struct {
  57.   HTAnchor *    dest;           /* The anchor to which this leads */
  58.   HTLinkType *  type;           /* Semantics of this link */
  59. } HTLink;
  60.  
  61. struct _HTAnchor {              /* Generic anchor : just links */
  62.   HTLink        mainLink;       /* Main (or default) destination of this */
  63.   HTList *      links;          /* List of extra links from this, if any */
  64.   /* We separate the first link from the others to avoid too many small mallocs
  65.      involved by a list creation. Most anchors only point to one place. */
  66.   HTParentAnchor * parent;      /* Parent of this anchor (self for adults) */
  67. };
  68.  
  69. struct _HTParentAnchor {
  70.   /* Common part from the generic anchor structure */
  71.   HTLink        mainLink;       /* Main (or default) destination of this */
  72.   HTList *      links;          /* List of extra links from this, if any */
  73.   HTParentAnchor * parent;      /* Parent of this anchor (self) */
  74.  
  75.   /* ParentAnchor-specific information */
  76.   HTList *      children;       /* Subanchors of this, if any */
  77.   HTList *      sources;        /* List of anchors pointing to this, if any */
  78.   HyperDoc *    document;       /* The document within which this is an anchor */
  79.   char *        address;        /* Absolute address of this node */
  80.   HTFormat      format;         /* Pointer to node format descriptor */
  81.   BOOL          isIndex;        /* Acceptance of a keyword search */
  82.   char *        title;          /* Title of document */
  83.  
  84.   HTList*       methods;        /* Methods available as HTAtoms */
  85.   void *        protocol;       /* Protocol object */
  86.   char *        physical;       /* Physical address */
  87. };
  88.  
  89. typedef struct {
  90.   /* Common part from the generic anchor structure */
  91.   HTLink        mainLink;       /* Main (or default) destination of this */
  92.   HTList *      links;          /* List of extra links from this, if any */
  93.   HTParentAnchor * parent;      /* Parent of this anchor */
  94.  
  95.   /* ChildAnchor-specific information */
  96.   char *        tag;            /* Address of this anchor relative to parent */
  97. } HTChildAnchor;
  98.  
  99.  
  100. /*      Create new or find old sub-anchor
  101. **      ---------------------------------
  102. **
  103. **      This one is for a new anchor being edited into an existing
  104. **      document. The parent anchor must already exist.
  105. */
  106.  
  107. extern HTChildAnchor * HTAnchor_findChild
  108.   PARAMS(
  109.      (HTParentAnchor *parent,
  110.       CONST char *tag)
  111.   );
  112.  
  113. /*      Create or find a child anchor with a possible link
  114. **      --------------------------------------------------
  115. **
  116. **      Create new anchor with a given parent and possibly
  117. **      a name, and possibly a link to a _relatively_ named anchor.
  118. **      (Code originally in ParseHTML.h)
  119. */
  120. extern HTChildAnchor * HTAnchor_findChildAndLink
  121.   PARAMS((
  122.       HTParentAnchor * parent,  /* May not be 0 */
  123.       CONST char * tag,         /* May be "" or 0 */
  124.       CONST char * href,        /* May be "" or 0 */
  125.       HTLinkType * ltype        /* May be 0 */
  126.   ));
  127.  
  128.  
  129. /*      Create new or find old named anchor
  130. **      -----------------------------------
  131. **
  132. **      This one is for a reference which is found in a document, and might
  133. **      not be already loaded.
  134. **      Note: You are not guaranteed a new anchor -- you might get an old one,
  135. **      like with fonts.
  136. */
  137.  
  138. extern HTAnchor * HTAnchor_findAddress
  139.   PARAMS(
  140.      (CONST char * address)
  141.      );
  142.  
  143.  
  144. /*      Delete an anchor and possibly related things (auto garbage collection)
  145. **      --------------------------------------------
  146. **
  147. **      The anchor is only deleted if the corresponding document is not loaded.
  148. **      All outgoing links from parent and children are deleted, and this anchor
  149. **      is removed from the sources list of all its targets.
  150. **      We also try to delete the targets whose documents are not loaded.
  151. **      If this anchor's source list is empty, we delete it and its children.
  152. */
  153.  
  154. extern BOOL HTAnchor_delete
  155.   PARAMS(
  156.      (HTParentAnchor *me)
  157.      );
  158.  
  159.  
  160. /*              Move an anchor to the head of the list of its siblings
  161. **              ------------------------------------------------------
  162. **
  163. **      This is to ensure that an anchor which might have already existed
  164. **      is put in the correct order as we load the document.
  165. */
  166.  
  167. extern void HTAnchor_makeLastChild
  168.   PARAMS(
  169.      (HTChildAnchor *me)
  170.      );
  171.  
  172. /*      Data access functions
  173. **      ---------------------
  174. */
  175.  
  176. extern HTParentAnchor * HTAnchor_parent
  177.   PARAMS(
  178.      (HTAnchor *me)
  179.      );
  180.  
  181. extern void HTAnchor_setDocument
  182.   PARAMS(
  183.      (HTParentAnchor *me, HyperDoc *doc)
  184.      );
  185.  
  186. extern HyperDoc * HTAnchor_document
  187.   PARAMS(
  188.      (HTParentAnchor *me)
  189.      );
  190. /* We don't want code to change an address after anchor creation... yet ?
  191. extern void HTAnchor_setAddress
  192.   PARAMS(
  193.      (HTAnchor *me, char *addr)
  194.      );
  195. */
  196.  
  197. /*      Returns the full URI of the anchor, child or parent
  198. **      as a malloc'd string to be freed by the caller.
  199. */
  200. extern char * HTAnchor_address
  201.   PARAMS(
  202.      (HTAnchor *me)
  203.      );
  204.  
  205. extern void HTAnchor_setFormat
  206.   PARAMS(
  207.      (HTParentAnchor *me, HTFormat form)
  208.      );
  209.  
  210. extern HTFormat HTAnchor_format
  211.   PARAMS(
  212.      (HTParentAnchor *me)
  213.      );
  214.  
  215. extern void HTAnchor_setIndex
  216.   PARAMS(
  217.      (HTParentAnchor *me)
  218.      );
  219.  
  220. extern BOOL HTAnchor_isIndex
  221.   PARAMS(
  222.      (HTParentAnchor *me)
  223.      );
  224.  
  225. extern BOOL HTAnchor_hasChildren
  226.   PARAMS(
  227.      (HTParentAnchor *me)
  228.      );
  229.  
  230. /*      Title handling
  231. */
  232. extern CONST char * HTAnchor_title
  233.   PARAMS(
  234.      (HTParentAnchor *me)
  235.      );
  236.  
  237. extern void HTAnchor_setTitle
  238.   PARAMS(
  239.      (HTParentAnchor *me, CONST char * title)
  240.      );
  241.  
  242. extern void HTAnchor_appendTitle
  243.   PARAMS(
  244.      (HTParentAnchor *me, CONST char * title)
  245.      );
  246.  
  247. /*      Link this Anchor to another given one
  248. **      -------------------------------------
  249. */
  250.  
  251. extern BOOL HTAnchor_link
  252.   PARAMS(
  253.      (HTAnchor *source, HTAnchor *destination, HTLinkType *type)
  254.      );
  255.  
  256. /*      Manipulation of links
  257. **      ---------------------
  258. */
  259.  
  260. extern HTAnchor * HTAnchor_followMainLink
  261.   PARAMS(
  262.      (HTAnchor *me)
  263.      );
  264.  
  265. extern HTAnchor * HTAnchor_followTypedLink
  266.   PARAMS(
  267.      (HTAnchor *me, HTLinkType *type)
  268.      );
  269.  
  270. extern BOOL HTAnchor_makeMainLink
  271.   PARAMS(
  272.      (HTAnchor *me, HTLink *movingLink)
  273.      );
  274.  
  275. /*      Read and write methods
  276. **      ----------------------
  277. */
  278. extern HTList * HTAnchor_methods PARAMS((HTParentAnchor *me));
  279.  
  280. /*      Protocol
  281. **      --------
  282. */
  283. extern void * HTAnchor_protocol PARAMS((HTParentAnchor * me));
  284. extern void HTAnchor_setProtocol PARAMS((HTParentAnchor * me,
  285.                                         void* protocol));
  286.  
  287. /*      Physical address
  288. **      ----------------
  289. */
  290. extern char * HTAnchor_physical PARAMS((HTParentAnchor * me));
  291. extern void HTAnchor_setPhysical PARAMS((HTParentAnchor * me,
  292.                                         char * protocol));
  293.  
  294. #endif /* HTANCHOR_H */
  295. /*
  296.  
  297.     */
  298.